int* preorder(struct Node* root, int* returnSize) {
    if(root==NULL)
    {
        *returnSize=0;
        return NULL;
    }
    int *result=(int *)malloc(sizeof(int)*10000);
    struct Node **stack=(struct Node **)malloc(sizeof(struct Node *)*10000);
    int pos=0,top=0;
    stack[top++]=root;
    while(top!=0)
    {
        struct Node * node = stack[--top];
        result[pos++]=node->val;
        for(int i=node->numChildren-1;i>=0;i--)
        {
            stack[top++] =node->children[i];
        }
    }
    free(stack);
    *returnSize=pos;
    return result;

}